package controller

import (
	"github.com/gin-gonic/gin"
	"go-demo/common"
	"go-demo/model"
	"go-demo/service"
	"net/http"
	"path/filepath"
	"strconv"
)

type VideoListResponse struct {
	model.Response
	VideoList []model.Video `json:"video_list"`
}

//逻辑如下：
//
//从请求中获取token参数。如果该token不存在于usersLoginInfo中，返回一个带有错误信息的JSON响应，表示用户不存在。
//
//从请求中获取上传的文件对象data，如果出现错误，返回一个带有错误信息的JSON响应。
//
//提取上传文件的名称，并将其与用户ID拼接作为最终的文件名。
//
//将上传文件保存到指定的目录中，如果保存过程中出现错误，返回一个带有错误信息的JSON响应。
//
//返回一个带有成功信息的JSON响应，表示文件上传成功。

// Publish check token then save upload file to public directory
func Publish(c *gin.Context) {
	token := c.PostForm("token")
	title := c.PostForm("title")

	if _, exist := common.UsersLoginInfo[token]; !exist {

		c.JSON(http.StatusOK, model.Response{StatusCode: common.ERROR, StatusMsg: "操作失败"})
		return
	}

	data, err := c.FormFile("data")
	if err != nil {
		c.JSON(http.StatusOK, model.Response{
			StatusCode: common.ERROR,
			StatusMsg:  err.Error(),
		})
		return
	}
	filename := filepath.Base(data.Filename) //获取视频名字
	saveFile, finalName := service.UploadVideo(token, filename, title)

	if err := c.SaveUploadedFile(data, saveFile); err != nil {
		c.JSON(http.StatusOK, model.Response{
			StatusCode: common.ERROR,
			StatusMsg:  err.Error(),
		})
		return
	}
	c.JSON(http.StatusOK, model.Response{
		StatusCode: common.SUCCESS,
		StatusMsg:  finalName + " uploaded successfully",
	})
}

// PublishList all users have same publish video list
func PublishList(c *gin.Context) {
	token := c.Query("token")
	userid, _ := strconv.ParseInt(c.Query("user_id"), 10, 64)

	if _, exist := common.UsersLoginInfo[token]; exist {

		videoList := service.GetVideos(userid)
		c.JSON(http.StatusOK, VideoListResponse{
			Response: model.Response{
				StatusCode: common.SUCCESS,
				StatusMsg:  "操作成功",
			},
			VideoList: videoList,
		})
	} else {
		c.JSON(http.StatusOK, UserLoginResponse{
			Response: model.Response{StatusCode: common.ERROR, StatusMsg: "操作失败"},
		})
	}

}
